#pragma once

#include <vex/core/make_raw_handle.h>
#include <vex/functional/implementation/delegate_default_impl.h>

namespace vex { namespace functional {

    template<class TSignature, class TFunction>
    auto make_raw_delegate(TFunction && p_func)
        -> implementation::delegate_default_impl<TSignature, TFunction>*
    {
        typedef implementation::delegate_default_impl<TSignature, TFunction> delegate_impl_t;
        return core::make_raw_handle<delegate_impl_t>(std::forward<TFunction>(p_func));
    }
}}